package com.iaz.tech.tools.uml.file.impl;

import javax.swing.JOptionPane;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSONObject;
import com.iaz.tech.tools.uml.IUMLNeuronAble;
import com.iaz.tech.tools.uml.behavioral.usecase.impl.NeuronUseCase;
import com.iaz.tech.tools.uml.file.NeuronJSONTools;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 用例加载器
 */
@EqualsAndHashCode(callSuper=false)
@Data
public class NeuronUseCaseLoader extends NeuronJSONTools{
    /**
     * 日志
     */
	private final static Logger logger = (Logger) LoggerFactory.getLogger(NeuronParameterLoader.class);

    @Override
    public void parseJSON(IUMLNeuronAble umlObj, JSONObject json) {
        try {
            if (json == null) {
                throw new Exception("入口参数json 为空，或者没有指定。");
            }
            if (umlObj == null) {
                throw new Exception("入口参数umlObj 为空，或者没有指定。");
            }
            if (!(umlObj instanceof NeuronUseCase)) {
                throw new Exception("入口参数umlObj 不是用例对象，或者没有指定。");
            }
            NeuronUseCase useCase = (NeuronUseCase) umlObj;
            if ((json.getString("name") == null) || 
                (json.getString("name").isEmpty())) {
                throw new Exception("入口参数json 中没有指定name 字段。");
            }
            useCase.setName(json.getString("name"));
            if ((json.getString("description") != null) && 
                (!json.getString("description").isEmpty())) {
                useCase.setDescription(json.getString("description"));
            }           
        } catch (Exception e) {
            logger.error("出现异常：" + e.getMessage());
        }
    }

    @Override
    public JSONObject toJSON(IUMLNeuronAble objStruct) {
        JSONObject result = new JSONObject();
        try {
            if (objStruct == null) {
                throw new Exception("入口参数objStruct 为空，或者没有指定。");
            }
            if (!(objStruct instanceof NeuronUseCase)) {
                throw new Exception("入口参数objStruct不是用例对象，或者没有指定。");
            } 
            NeuronUseCase useCase = (NeuronUseCase) objStruct;
            if ((useCase.getName() != null) && (!useCase.getName().isEmpty())) {
                result.put("name", useCase.getName());
            }
            if ((useCase.getDescription() != null) && (!useCase.getDescription().isEmpty())) { 
                result.put("description", useCase.getDescription());
            }            
        } catch (Exception e) {
            logger.error("出现异常：" + e.getMessage());
            result = new JSONObject();
        }
        return result;
    }

}
